﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Business;
using Entities;
using DevComponents.DotNetBar;
namespace Presentation
{
    public partial class frmLapPhieuThuTien : DevComponents.DotNetBar.Office2007Form
    {
        ErrorProvider error = new ErrorProvider();
        public frmLapPhieuThuTien()
        {
            InitializeComponent();
            
        }

        private void frmLapPhieuThuTien_Load(object sender, EventArgs e)
        {
            LapPhieuMoi();
        }
        private void LapPhieuMoi()
        {
            dtiNgayLap.Value = DateTime.Now;
            int id = PhieuThuTienService.GetCurrentID();
            txtMaPhieuThu.Text = (id == 1 ? id : (id + 1)).ToString();            
            btnLapPhieuThu.Enabled = true;            
            txtTenKhachHang.Text = "";
            txtDiaChi.Text = "";
            txtSoDienThoai.Text = "";
            txtEmail.Text = "";
            txtTienNo.Text = "";
            txtMaKhachHang.Text = "";
            txtMaKhachHang.Focus();
        }

        private void txtMaKhachHang_Validating(object sender, CancelEventArgs e)
        {

            int maKhachhang = -1;
            if (!int.TryParse(txtMaKhachHang.Text, out maKhachhang))
            {
                error.SetError(txtMaKhachHang, "Mã khách hàng là số nguyên!");
                e.Cancel = true;
                return;
            }

            error.SetError(txtMaKhachHang, "");
            KhachHangDTO kh = KhachHangService.GetKhachHangByMaKhachHang(maKhachhang);
            if (kh == null)
            {

                txtTenKhachHang.Text = "";
                txtDiaChi.Text = "";
                txtSoDienThoai.Text = "";
                txtEmail.Text = "";
                txtTienNo.Text = "";
               /// e.Cancel = true;
                error.SetError(txtMaKhachHang, "Mã khách hàng không tồn tại!");
                return;
            }

            
            e.Cancel = false;
        }

        private void LoadThongTin(int maKhachHang)
        {
            KhachHangDTO kh = KhachHangService.GetKhachHangByMaKhachHang(maKhachHang);
            if (kh != null)
            {
                txtTenKhachHang.Text = kh.HoTen;
                txtDiaChi.Text = kh.DiaChi;
                txtSoDienThoai.Text = kh.DienThoai;
                txtEmail.Text = kh.Email;
                txtTienNo.Text = kh.TienNo.ToString();
            }

        }
        private void btnLapPhieuThu_Click(object sender, EventArgs e)
        {
            LapPhieuThuTien();
        }

        private void btnTaoPhieuMoi_Click(object sender, EventArgs e)
        {
            LapPhieuMoi();
        }

        private void frmLapPhieuThuTien_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (btnLapPhieuThu.Enabled)
            {
                DialogResult r = MessageBoxEx.Show("Bạn có muốn lưu Phiếu thu tiền?", "Thông báo!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                if (r == DialogResult.Cancel)
                {
                    e.Cancel = true;

                }
                else if (r == DialogResult.Yes)
                {
                    if (!LapPhieuThuTien())
                        e.Cancel = true;
                }
            }
        }
        private bool LapPhieuThuTien()
        {
            int maKhachHang = -1;
            double soTienThu = 0;
            if (!int.TryParse(txtMaKhachHang.Text, out maKhachHang))
            {
                MessageBoxEx.Show("Chưa nhập mã khách hàng", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtMaKhachHang.Focus();
                return false;
            }

            if (KhachHangService.GetKhachHangByMaKhachHang(maKhachHang) == null)
            {
                MessageBoxEx.Show("Không tồn tại khách hàng này", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtMaKhachHang.Focus();
                txtMaKhachHang.SelectAll();
                return false;
            }
            if (!double.TryParse(txtSoTienThu.Text, out soTienThu))
            {
                MessageBoxEx.Show("Chưa nhập số tiền thu!\nHoặc số tiền thu không đúng", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtSoTienThu.Focus();
                return false;
            }
            ThamSoDTO quyDinh = ThamSoService.GetThamSoByMaThamSo(5);
            if (quyDinh.SuDung == 1 && soTienThu > double.Parse(txtTienNo.Text))
            {
                MessageBoxEx.Show("Số tiền thu không được lớn hơn số tiền nợ!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtSoTienThu.Focus();
                return false;
            }

            //Thêm phiếu thu mới
            PhieuThuTienDTO pt = new PhieuThuTienDTO();
            pt.NgayThu = dtiNgayLap.Value;
            pt.MaKhachHang = maKhachHang;
            pt.SoTienThu = soTienThu;
            pt.TinhTrang = 1;
            PhieuThuTienService.Insert(pt);

            //Cập nhật tiền nợ của Khách hàng
            KhachHangDTO khachHang = KhachHangService.GetKhachHangByMaKhachHang(maKhachHang);
            khachHang.TienNo -= pt.SoTienThu;
            KhachHangService.Update(khachHang);


            btnLapPhieuThu.Enabled = false;
            txtTienNoMoi.Text = (double.Parse(txtTienNo.Text) - soTienThu).ToString();
            
#region //Lập báo cáo công nợ
            int maBaoCaoCongNo;
            BaoCaoCongNoDTO baoCaoCongNo;
            if (BaoCaoCongNoService.Exists(pt.NgayThu))
            {
                baoCaoCongNo = BaoCaoCongNoService.GetBaoCaoCongNoByThang(pt.NgayThu);
                maBaoCaoCongNo = baoCaoCongNo.MaBaoCaoCongNo;
            }
            else
            {
                baoCaoCongNo = new BaoCaoCongNoDTO();
                baoCaoCongNo.Thang = pt.NgayThu;
                baoCaoCongNo.TinhTrang = 1;
                BaoCaoCongNoService.Insert(baoCaoCongNo);
                maBaoCaoCongNo = BaoCaoCongNoService.GetCurrentID();
            }

            if (ChiTietBaoCaoCongNoService.Exists(maBaoCaoCongNo, pt.MaKhachHang))
            {
                ChiTietBaoCaoCongNoDTO chiTietCongNo = ChiTietBaoCaoCongNoService.GetChiTietBaoCao(maBaoCaoCongNo, pt.MaKhachHang);
                chiTietCongNo.PhatSinh -= pt.SoTienThu;
                chiTietCongNo.NoCuoi = chiTietCongNo.PhatSinh + chiTietCongNo.NoDau;
                ChiTietBaoCaoCongNoService.Update(chiTietCongNo);
            }
            else
            {
                ChiTietBaoCaoCongNoDTO chiTietCongNo = new ChiTietBaoCaoCongNoDTO();
                chiTietCongNo.MaKhachHang = pt.MaKhachHang;
                chiTietCongNo.MaBaoCaoCongNo = maBaoCaoCongNo;
                chiTietCongNo.NoDau = 0;
                chiTietCongNo.PhatSinh = -pt.SoTienThu;
                chiTietCongNo.NoCuoi = chiTietCongNo.PhatSinh + chiTietCongNo.NoDau;
                ChiTietBaoCaoCongNoService.Insert(chiTietCongNo);
            }

#endregion

            MessageBoxEx.Show("Lập phiếu thu tiền thành công", "Thông báo!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            return true;
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void panel2_Paint(object sender, PaintEventArgs e)
        {

        }

        private void btnTimKhachHang_Click(object sender, EventArgs e)
        {
            frmTraCuuKhachHang frm = new frmTraCuuKhachHang();
            frm.fromOtherForm = true;
            frm.ShowDialog();
            int maKhachHang = frm.maKhachHang;
            this.txtMaKhachHang.Text = maKhachHang.ToString();
        }

        private void txtMaKhachHang_TextChanged(object sender, EventArgs e)
        {
            int maKhachHang = -1;
            if (int.TryParse(txtMaKhachHang.Text, out maKhachHang))
            {
                LoadThongTin(maKhachHang);
            }
        }
    }
}
